package com.dify.tool.common.utils;

import co.elastic.clients.elasticsearch._types.query_dsl.Query;
import co.elastic.clients.json.JsonData;

import java.util.List;

/**
 * @author shl
 * @date 2025-07-28
 * @description
 */
public class EsQueryBuilder {

    /**
     * 匹配查询
     */
    public static Query matchQuery(String field, String value) {
        return Query.of(q -> q
                .match(m -> m
                        .field(field)
                        .query(value)
                )
        );
    }

    /**
     * 多字段匹配查询
     */
    public static Query multiMatchQuery(String query, String... fields) {
        return Query.of(q -> q
                .multiMatch(m -> m
                        .query(query)
                        .fields(List.of(fields))
                )
        );
    }

    /**
     * 范围查询
     */
    public static Query rangeQuery(String field,
                                   Double gte,
                                   Double lte) {
        return Query.of(q -> q
                .range(r -> r
                        .field(field)
                        .gte(JsonData.of(gte))
                        .lte(JsonData.of(lte))
                )
        );
    }

//    /**
//     * 布尔查询
//     */
//    public static Query boolQuery(Consumer<BoolQuery.Builder> boolConfigurer) {
//        return Query.of(q -> q
//                .bool(boolConfigurer)
//        );
//    }

    /**
     * 嵌套查询
     */
    public static Query nestedQuery(String path, Query query) {
        return Query.of(q -> q
                .nested(n -> n
                        .path(path)
                        .query(query)
                )
        );
    }
}
